package br.com.entidade;

import java.util.List;

public class Acorde {

	private List<Nota> notas;

	private Nota tonica;

	private String cifragem;

	public Acorde(List<Nota> notas, String cifragem) {
		super();
		this.notas = notas;
		this.tonica = notas.get(0);
		this.cifragem = cifragem;
	}

	public void inverter() {
		Nota n = notas.remove(0);
		notas.add(n);
	}

	public Nota getTonica() {
		return tonica;
	}

	public Nota getNota(int index) {
		Nota n;
		try {
			n = notas.get(index);
		} catch (IndexOutOfBoundsException e) {
			n = null;
		}
		return n;
	}

	public String getCifragem() {
		return cifragem;
	}

	public boolean isInvertdo() {
		return !tonica.equals(notas.get(0));
	}

	public List<Nota> getNotas() {
		return notas;
	}

	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append(cifragem);
		sb.append("( ");
		for (Nota nota : notas) {
			sb.append(nota.toString());
			sb.append(" ");
		}
		sb.append(" )");
		return sb.toString();
	}
	
	public enum Tipo {
		MAIOR("", new Intervalo[] { Intervalo.TONICA, Intervalo.TERCA_MAIOR,
				Intervalo.QUINTA_JUSTA }), MENOR("m", new Intervalo[] {
				Intervalo.TONICA, Intervalo.TERCA_MENOR, Intervalo.QUINTA_JUSTA }), MEIO_DIMINUTO(
				"m-5/7", (new Intervalo[] { Intervalo.TONICA,
						Intervalo.TERCA_MENOR, Intervalo.QUINTA_DIMINUTA,
						Intervalo.SETIMA_MENOR })), DIMINUTO("dim",
				new Intervalo[] { Intervalo.TONICA, Intervalo.TERCA_MENOR,
						Intervalo.QUINTA_DIMINUTA, Intervalo.SETIMA_DIMINUTA });

		private String cifragem;

		private Intervalo[] intervalos;

		private Tipo(String cifragem, Intervalo[] intervalos) {
			this.cifragem = cifragem;
			this.intervalos = intervalos;
		}

		public String getCifragem() {
			return cifragem;
		}

		public Intervalo[] getIntervalos() {
			return intervalos;
		}

	}

}